package com.sy.controller.finance;


import com.sy.common.bean.ResultBean;
import com.sy.common.exception.ValidateException;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 自定义控制类的父类，用户处理响应结果
 */
@Controller //添加到ioc容器中
public class MyFinanceBaseController {
    private final static int SUCCESS = 200;
    private final static int FAIL = 0;

    /**
     * 返回统一格式的成功结果集（不含数据）
     * @param msg 响应信息
     * @return    结果集
     */
    public ResultBean success(String msg){
        return handleResult(SUCCESS,msg,null);
    }

    /**
     * 返回统一格式的成功结果集（含数据）
     * @param msg  响应信息
     * @param data 响应数据
     * @return     结果集
     */
    public ResultBean success(String msg, Object data){
        return handleResult(SUCCESS,msg,data);
    }

    /**
     * 返回统一格式的失败结果集（不含错误数据）
     * @param msg 失败响应信息
     * @return    结果集
     */
    public ResultBean fail(String msg){
        return handleResult(FAIL,msg,null);
    }

    /**
     * 返回统一格式的失败结果集（含有错误数据）
     * @param msg  失败响应信息
     * @param data 错误详细信息（错误数据）
     * @return     结果集
     */
    public ResultBean fail(String msg, Object data){
        return handleResult(FAIL,msg,data);
    }
    /**
     * 捕获响应结果
     * @param code 响应码
     * @param msg  结果信息
     * @param data 响应数据
     * @return     结果集对象
     */
    public ResultBean handleResult(int code,String msg,Object data){
        return new ResultBean<>(code,msg,data);
    }

    /**
     * 校验信息，不符合条件，抛出自定义异常，然后被自定义全局异常类捕捉，进行处理
     * @param result 验证结果对象？
     */
    public void validate(BindingResult result){
        /*获取错误字段，并遍历*/
        List<FieldError> errors = result.getFieldErrors();
        if(null != errors && !errors.isEmpty()){
            /*存储错误字段*/
            Map<String,String> errorMap = new HashMap<>();
            for (FieldError e: errors) {
                /*错误名，错误详细信息*/
                errorMap.put(e.getField(),e.getDefaultMessage());
            }
            /*抛出自定义校验异常*/
            throw new ValidateException(errorMap);
        }
    }



    protected ResultBean saveResult(int rs){
        return rs>=1?success("保存成功"):fail("保存失败");
    }

    protected ResultBean updateResult(int rs){
        return rs>=1?success("修改成功"):fail("修改失败");
    }

    protected ResultBean deleteResult(int rs){
        return rs>=1?success("删除成功"):fail("删除失败");
    }

    /**
     * 封装查询结果，返回查询数据
     * @param object    查询结果
     * @return          查询是否成功，及成功后的数据
     */
    protected ResultBean selectResult(Object object){
        boolean result = true;
        if(object instanceof List){     //判断object是否是集合,object=null时，结果为false
            List list = (List) object;
            result = !(list.isEmpty());  //list没有存值的时候list.isEmpty为true，取反则为false
        }else if (object instanceof Map){
            Map map = (Map) object;
            result = !(map.isEmpty());
        }else {
            result = (null != object);
        }
        return result ? success("查询成功",object) : fail("查询失败,数据可能为空");
    }

}
